Skip to content

SpringBoot学习_学习02

参考: http://svip.iocoder.cn/Spring-Boot/Interview/

看完这篇文章,感觉收效甚微,这里记录一下这套视频的相关笔记,同时如果后续进行回顾的话希望对于 SpringBoot 有更好的一个理解和具体使用。(后续打算将相关的框架集成相关实际项目使用的内容搞一下,根据这个项目: https://github.com/YunaiV/SpringBoot-Labs

视频地址: https://www.bilibili.com/video/BV1Fh4y1D7Aq

学习时间:2024-05-01 10:49:20

SpringBoot 自动配置原理

  • 1、通过 @SpringBootConfiguration 引入了 @EnableAutoConfiguration(负责启动自动配置功能)
  • 2、@EnableAutoConfiguration 引入了 @Import
  • 3、Spring 容器启动时:加载loc容器时会解析@Import注解
  • 4、@Import导入了一个deferredlmportSelector,它会使SpringBoot的自动配置类的顺序在最后,这样方便我们扩展和覆盖
  • 5、然后读取所有的 /META-INF/spring.factories 文件
    • 会去所有的 jar 包中和类路径中去读取这个文件(伪 SPI )
  • 6、过滤出所有AutoConfigurtionClass类型的类
  • 7、最后通过 @Condition 排除无效的自动配置类

梅特 in For

看一下这段话:

image.png

关于条件评估这步:

  • @ConditionalOnClass: 当类路径上存在指定的类时,相关的配置才会被应用。
  • @ConditionalOnBean: 当上下文中存在指定的 Bean 时,相关的配置才会被应用。
  • @ConditionalOnProperty: 当存在指定的配置属性且满足指定的值时,相关的配置才会被应用。

为什么 SpringBoot 的 jar 可以直接运行?

  • 1、SpringBoot提供了一个插件 spring-boot-maven-plugin, 用于把程序打包成一个可执行的jar包。
  • 2、Spring Boot应用打包之后,生成一个Fat jar(jar包中包含jar),包含了应用依赖的 jar包和Spring Boot loader相关的类。
  • 3、java -jar 会去找 jar中的 manifest文件,在那里面找到真正的启动类;
  • 4、Fat jar的启动Main函数是 JarLauncher, 它负责创建一个LaunchedURLClassLoader:来加载boot-lib下面的jar,并以一个新线程启动应用的启动类的 Main函数(找到 manifest 中的 Start-Class)。

image.png


暂时没找到对应的类,而且 MainClass 对应相关配置也没看到,可能理解和实际有点问题。

SpringBoot 的启动原理

SpringBoot 的核心注解

  • 1、@SpringBootApplication注解:这个注解标识了一个SpringBoot.工程,它实际上是另外三个注解的组合,这三个注解是
  • 2、@SpringBootConfiguration:这个注解实际就是一个@Configuration,表示启动类也是一个配置类
  • 3、@EnableAutoConfiguration:向Spring容器中导入了一个Selector,用来加载 ClassPath 下 SpringFactoriest 中所定义的自动配置类,将这些自动加载为配置Bean。
  • 4、@Conditional也很关键,如果没有它我们无法在自定义应用中进行定制开发
    • @ConditionalOnBean
    • @ConditionalOnClass
    • @ConditionalOnExpression